package com.niit.hbase.wordcount;

import org.apache.hadoop.hbase.client.Result;
import org.apache.hadoop.hbase.io.ImmutableBytesWritable;
import org.apache.hadoop.hbase.mapreduce.TableMapper;
import org.apache.hadoop.hbase.util.Bytes;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

/*
 KEYIN: 如果读取的是一个普通文件，LongWritable/IntWritable 就是数据所在行数  1 2 3 4 5 6
 VALUEIN：读取文件中的数据
 KEYOUT：Mapper拆分的数据的 键    Mapper的输出  等于 Reduce 的 输入
 VALUEOUT：Mapper拆后数据 值
 */
                                            // KEYOUT VALUEOUT
public class WordCountMapper extends TableMapper<Text, IntWritable> {


    @Override
    protected void map(ImmutableBytesWritable key, Result value, Context context) throws IOException, InterruptedException {
        //Result value 读取HBase数据的 结果集
        //1.从结果集中 获取指定列族 指定列的数据 并转换成字符串            获取手机型号， 统计手机型号出现的次数
        String  data = Bytes.toString( value.getValue(Bytes.toBytes("C1"),Bytes.toBytes("receiver_phone_type") )  );
        //data的数据： OPPO FindX
        //2.根据空格进行分割，分别统计品牌和型号出现次数
        String[] words = data.split("\\s");// \\s 表示一切带空格的东西   \t 空格 换行
        // ["OPPO","FindX"]
        //3.输出，每个单词 和 次数   1
        for (String word:words){
                            // 每个单词                    每个单词只出现了一次
            context.write( new Text(word) ,new IntWritable(1)          );
        }



    }
}
